/**
 * Created by sjg on 17/8/31.
 *
 * 实验性功能相关接口
 * 包括: VI 实验室等
 */
var express = require('express');
var router = express.Router();
var superagent = require('superagent');
var async = require( 'async');
var usersUtil = require('../util/usersUtil.js');
var CONFIG = require('../../../common/config');
var CODE = require('../../../common/code');
var checkUtil = require('../util/checkUtil');
var printUtil = require('../util/printUtil');
var tg3Util = require('../util/tg3Util');
var labUtil = require('../util/labUtil');
var payUtil = require('../util/payUtil');
var callFuncUtil = require('../util/callFuncUtil');
var rpcFunc = require('../rpcSrv/rpcFunc.js');
var StaticizeUtil = require('../../../common/util/StaticizeUtil');
var luaSearchUtil = require('../util/luaSearchUtil');

/**
 * [private]建立 VI 实验室 redis 缓存
 *
 * 调用地址: http://localhost:3000/v5/lab/initLabCache
 * */
function initLabCache (req, res, next) {
    labUtil.initCache(function(error){

        if(error) {
            return labUtil.ret_func_json(0, '初始化缓存失败', null, res);
        }
        return labUtil.ret_func_json(1, '初始化缓存失败', null, res);
    });
}
router.get('/initLabCache', initLabCache);
router.post('/initLabCache', initLabCache);


/***
 * 获取 vi 实验室问题列表
 *
 * 测试地址: http://localhost:3000/v5/lab/getInfoQuestions_v6_2
 * */
function getInfoQuestions_v6_2 (req, res, next) {

    var device = checkUtil.numberFromReq(req, "device");
    var userId = checkUtil.numberFromReq(req, "userId");

    var uri = '/v5/lab/getInfoQuestions_v6_2';
    var para = {
        device:device
    };
    StaticizeUtil.getByRedis(__filename, uri, para, function(error, content){
        if(content){ // 有缓存, 且不是本地调试, 直接返回
            return tg3Util.ret_func_json(1, CODE.OPERATION_SUCCESS, content, res);
        }

        labUtil.getInfoQuestions_v6_2(function(error,data){
            if(error) {
                var errMsg = typeof error == 'string' ? error : CODE.OPERATION_FAILED;
                console.log('/v5/lab.js [getInfoQuestions_v6_2] getInfoQuestions_v6_2 err: ' + errMsg);
                return labUtil.ret_func_json(0,errMsg,{},res);
            }
            var content = StaticizeUtil.recordByRedis(__filename, uri, para, data);  // 缓存
            return labUtil.ret_func_json(1,CODE.OPERATION_SUCCESS, data,res);
        });
    });
}
router.get('/getInfoQuestions_v6_2', getInfoQuestions_v6_2);
router.post('/getInfoQuestions_v6_2', getInfoQuestions_v6_2);

/**
 * 参数: device	"0 表示从pc来的请求
 * 1 标识一键生成iOS端
 * 2 标识一键生成android端
 * 3  标识一键生成 app 嵌入网页
 * 4 标识一键生成 web 端
 * 5 标识一键生成微信端
 *
 * 101 表示pc美化大师/102表示pc wps/103表示wps android/104表示wps ios
 * 201 标识利楚商务
 * 301 标识酒单网"
 * 参数: userId	 用户唯一标识
 * 参数: typeL	指定作品的一级分类, 暂时只支持 logo 印品
 * 参数: typeM	指定作品的二级分类, 暂时只支持 logo 下的 logo 和印品下的名片
 * 参数: answer	"用户答案的 json 字符串
 * [{"id" : 1,"value" :[“阿里巴巴”] // 文字},
 * {"id" : 2,"value" :[22] // 单选},
 * {"id" : 3,"value" :[22,24] // 多选},
 * {"id" : 4,"value" :[22,23,24] // 多选, 为空则标识没有选}]"
 * 参数[可选]: appendInfo	"附带信息的 json 字符串(logo 不需要传, 名片时传递 logo 的信息)
 * [{"id" : 989,"typeL" : 1010,}]"
 *
 * 测试地址: http://localhost:3000/v5/lab/getProductIdByAnswer_v6_2?device=1&typeL=1010&typeM=10100200&answer=[{"id":1,"value":["hahha"]},{"id":2,"value":[-1]},{"id":3,"value":[21,22,23]},{"id":4,"value":[44,45,46]}]&userId=299188
 * */
function getProductIdByAnswer_v6_2(req, res, next) {

    var device = checkUtil.numberFromReq(req, 'device');
    var typeL = checkUtil.numberFromReq(req, 'typeL');
    var typeM = checkUtil.numberFromReq(req, 'typeM');
    var answerInfo = checkUtil.stringFromReq(req, 'answer');
    var appendInfo = checkUtil.stringFromReq(req, 'appendInfo');
    var userId = checkUtil.numberFromReq(req,'userId');

    if(!userId || userId <= 0) {
        return labUtil.ret_func_json(0, '参数错误', null, res);
    }
    // 1.单页  2.多页  3.ppt  4.印品  6.社交媒体  7.电商  8.微商  1010. logo 1011 营销商品
    // 印品, logo
    if(typeL != CONFIG.DOC_TYPE_4 && typeL != CONFIG.DOC_TYPE_1010) {
        return labUtil.ret_func_json(0, '暂不支持此分类', null, res);
    }
    if(typeM != 40100/**名片*/ && typeM != 10100200/**logo 模板*/) {
        return labUtil.ret_func_json(0, '暂不支持此分类', null, res);
    }
    if(answerInfo.length < 2) {
        return labUtil.ret_func_json(0, '参数错误', null, res);
    }
    var  answer = JSON.parse(answerInfo);
    var append = null;
    if(appendInfo && appendInfo.length>2) {
        append = JSON.parse(appendInfo);
    }

    labUtil.getProductIdByAnswer_v6_2(userId,typeL,typeM,answer,append,function(error,data){
        if(error) {
            var errMsg = typeof error == 'string' ? error : CODE.OPERATION_FAILED;
            console.log('/v5/lab.js [getProductIdByAnswer_v6_2] getProductIdByAnswer_v6_2 err: ' + errMsg);
            return labUtil.ret_func_json(0,errMsg,{},res);
        }
        return labUtil.ret_func_json(1,CODE.OPERATION_SUCCESS, data,res);
    });
}
router.get('/getProductIdByAnswer_v6_2', getProductIdByAnswer_v6_2);
router.post('/getProductIdByAnswer_v6_2', getProductIdByAnswer_v6_2);

/**
 *
 * 参数: device	"0 表示从pc来的请求
 * 1 标识一键生成iOS端
 * 2 标识一键生成android端
 * 3  标识一键生成 app 嵌入网页
 * 4 标识一键生成 web 端
 * 5 标识一键生成微信端
 *
 * 101 表示pc美化大师/102表示pc wps/103表示wps android/104表示wps ios
 * 201 标识利楚商务
 * 301 标识酒单网"
 * 参数: userId	 用户唯一标识
 * 参数: id	作品唯一标识
 * 参数: typeL	一级分类标识(作品有两张表, 需根据 typeL 判断)
 * 参数[可选]: designId	-1或不存在不处理, 否则将该作品切换到指定模板上
 *
 * 测试地址: http://localhost:3000/v5/lab/getProductPreviewById_v6_2?userId=299188&id=10615&typeL=4
 * */
function getProductPreviewById_v6_2(req, res, next) {

    var device = checkUtil.numberFromReq(req, 'device');
    var userId = checkUtil.numberFromReq(req, 'userId');
    var id = checkUtil.numberFromReq(req, 'id');
    var typeL = checkUtil.numberFromReq(req, 'typeL');
    var designId = checkUtil.numberFromReq(req, 'designId') || 0;

    if(userId <= 0) {
        return labUtil.ret_func_json(0,'用户唯一标识为空',{},res);
    }
    if(id <= 0) {
        return labUtil.ret_func_json(0,'作品唯一标识为空',{},res);
    }
    if(typeL != CONFIG.DOC_TYPE_4 && typeL != CONFIG.DOC_TYPE_1010) {
        return labUtil.ret_func_json(0,'暂不支持此分类',{},res);
    }

    labUtil.getProductPreviewById_v6_2(userId, typeL, id, designId, function(error, result){
        if(error) {
            var errMsg = typeof error == 'string' ? error : CODE.OPERATION_FAILED;
            console.log('/v5/lab.js [getProductPreviewById_v6_2] getProductPreviewById_v6_2 err: ' + errMsg);
            return labUtil.ret_func_json(0,errMsg,{},res);
        }
        return labUtil.ret_func_json(1,CODE.OPERATION_SUCCESS, result,res);
    });
}
router.get('/getProductPreviewById_v6_2', getProductPreviewById_v6_2);
router.post('/getProductPreviewById_v6_2', getProductPreviewById_v6_2);


// ------------- 实验性相关功能 app 错误日志上传接口 ---------------------------------
/**
 *
 * 参数: device	"0 表示从pc来的请求
 * 1 标识一键生成iOS端
 * 2 标识一键生成android端
 * 3  标识一键生成 app 嵌入网页
 * 4 标识一键生成 web 端
 * 5 标识一键生成微信端
 *
 * 101 表示pc美化大师/102表示pc wps/103表示wps android/104表示wps ios
 * 201 标识利楚商务
 * 301 标识酒单网"
 * 参数: userId	 用户唯一标识
 * 参数: deviceInfo	设备信息
 * 参数: errorLog	错误日志
 *
 *
 * 测试地址: http://localhost:3000/v5/lab/uploadUserDeviceErrorLog_v6_2?device=2&userId=299188&deviceInfo={}&errorLog={}
 * */
function uploadUserDeviceErrorLog_v6_2(req, res, next) {

    var device = checkUtil.numberFromReq(req, 'device');
    var userId = checkUtil.stringFromReq(req, 'userId');
    var deviceInfo = checkUtil.stringFromReq(req, 'deviceInfo');
    var errorLog = checkUtil.stringFromReq(req, 'errorLog');

    labUtil.uploadUserDeviceErrorLog_v6_2(device, userId, deviceInfo, errorLog, function(error){

        if(error) {
            var errMsg = typeof error == 'string' ? error : CODE.OPERATION_FAILED;
            console.log('/v5/lab.js [uploadUserDeviceErrorLog_v6_2] uploadUserDeviceErrorLog_v6_2 err: ' + errMsg);
            return labUtil.ret_func_json(0,errMsg,{},res);
        }
        return labUtil.ret_func_json(1,CODE.OPERATION_SUCCESS, {},res);
    });

}
router.get('/uploadUserDeviceErrorLog_v6_2', uploadUserDeviceErrorLog_v6_2);
router.post('/uploadUserDeviceErrorLog_v6_2', uploadUserDeviceErrorLog_v6_2);


// ------------- 实验性相关功能 生成视频相关接口 ---------------------------------
/**
 * 获取视频提纲及预览数据
 *
 * 参数: device	"0表示从p0 表示从pc来的请求
 * 1 标识一键生成iOS端
 * 2 标识一键生成android端
 * 3  标识一键生成 app 嵌入网页
 * 4 标识一键生成 web 端
 * 5 标识一键生成微信端
 *
 * 101 表示pc美化大师/102表示pc wps/103表示wps android/104表示wps ios
 * 201 标识利楚商务
 * 301 标识酒单网"
 * 参数: userId	用户唯一标识
 * 参数:  isDesign	是否为模板标记, 0 不是模板, 1 是模板, 默认为0
 * 参数: docId	 对应文档 id, 可能是模板 id 也可能是用户文档 id, 根据 isDesign 区分
 *
 * 测试地址: 模板: http://localhost:3000/v5/lab/getVideoTgInfo_v6_3?device=1&userId=299188&isDesign=1&docId=1
 *          作品: http://localhost:3000/v5/lab/getVideoTgInfo_v6_3?device=1&userId=299188&isDesign=0&docId=1
 * */
function getVideoTgInfo_v6_3(req, res, next) {

    var device = checkUtil.numberFromReq(req, 'device');
    var userId = checkUtil.numberFromReq(req, 'userId') || 0;
    var isDesign = checkUtil.numberFromReq(req, 'isDesign') || 0;
    var docId = checkUtil.numberFromReq(req, 'docId');

    if(userId <= 0 || isDesign <0 || docId<=0 ) {
        return labUtil.ret_func_json(0, '参数错误', {}, res);
    }

    labUtil.getVideoTgInfo_v6_3(userId, docId, isDesign, function(error, data){
        if(error) {
            var errMsg = typeof error == 'string' ? error : CODE.OPERATION_FAILED;
            console.log('/v5/lab.js [getVideoTgInfo_v6_3] getVideoTgInfo_v6_3 err: ' + errMsg);
            return labUtil.ret_func_json(0,errMsg,{},res);
        }
        return labUtil.ret_func_json(1,CODE.OPERATION_SUCCESS, data,res);
    });
}
router.get('/getVideoTgInfo_v6_3', getVideoTgInfo_v6_3);
router.post('/getVideoTgInfo_v6_3', getVideoTgInfo_v6_3);

/**
 * 创建/修改视频文档作品
 *
 * 参数: device	"0表示从p0 表示从pc来的请求
 * 1 标识一键生成iOS端
 * 2 标识一键生成android端
 * 3  标识一键生成 app 嵌入网页
 * 4 标识一键生成 web 端
 * 5 标识一键生成微信端
 *
 * 101 表示pc美化大师/102表示pc wps/103表示wps android/104表示wps ios
 * 201 标识利楚商务
 * 301 标识酒单网"
 * 参数: userId	用户唯一标识
 * 参数: videoTg	/v5/lab/getVideoTgInfo_v6_3 返回结果的 data 字段的 json 字符串, 其中 videoInfo为视频预览信息, 可不传递
 *
 * 测试地址: 插入: http://localhost:3000/v5/lab/saveVideoTgInfo_v6_3?device=1&userId=299188&&videoTg={"designId":1,"designNm":"星空科技风招聘会邀请函","productId":0,"productNm":"测试插入","coreStructure":{"ct":903,"version":3,"name":"招聘会邀请函","root":{}}}
 *          更新: http://localhost:3000/v5/lab/saveVideoTgInfo_v6_3?device=1&userId=299188&&videoTg={"designId":1,"designNm":"星空科技风招聘会邀请函","productId":3,"productNm":"测试修改","coreStructure":{"ct":903,"version":3,"name":"招聘会邀请函","root":{}}}
 * */
function saveVideoTgInfo_v6_3 (req, res, next) {

    var device = checkUtil.numberFromReq(req, 'device');
    var userId = checkUtil.numberFromReq(req, 'userId');
    var videoTg = checkUtil.stringFromReq(req, 'videoTg');

    if(userId <=0 || videoTg.length <2) {
        return labUtil.ret_func_json(0, '参数错误', {}, res);
    }
    var video = JSON.parse(videoTg);
    if(!video) {
        return labUtil.ret_func_json(0, '参数错误', {}, res);
    }

    labUtil.saveVideoTgInfo_v6_3(userId, video, function(error, result){
        if(error) {
            var errMsg = typeof error == 'string' ? error : CODE.OPERATION_FAILED;
            console.log('/v5/lab.js [saveVideoTgInfo_v6_3] saveVideoTgInfo_v6_3 err: ' + errMsg);
            return labUtil.ret_func_json(0,errMsg,{},res);
        }
        return labUtil.ret_func_json(1,CODE.OPERATION_SUCCESS, result,res);
    });
}
router.get('/saveVideoTgInfo_v6_3', saveVideoTgInfo_v6_3);
router.post('/saveVideoTgInfo_v6_3', saveVideoTgInfo_v6_3);

/**
 * 预览用户作品
 *
 * 参数: device	"0表示从p0 表示从pc来的请求
 * 1 标识一键生成iOS端
 * 2 标识一键生成android端
 * 3  标识一键生成 app 嵌入网页
 * 4 标识一键生成 web 端
 * 5 标识一键生成微信端
 *
 * 101 表示pc美化大师/102表示pc wps/103表示wps android/104表示wps ios
 * 201 标识利楚商务
 * 301 标识酒单网"
 * 参数: userId	用户唯一标识
 * 参数: productId	视频作品唯一标识
 *
 * 测试地址: http://localhost:3000/v5/lab/previewVideoProduct_v6_3?device=1&userId=299188&productId=1
 * */
function previewVideoProduct_v6_3(req, res, next) {

    var device = checkUtil.numberFromReq(req, 'device');
    var userId = checkUtil.numberFromReq(req, 'userId');
    var productId = checkUtil.numberFromReq(req, 'productId');

    if(userId <= 0 || productId <=0) {
        return labUtil.ret_func_json(0, '参数错误', {}, res);
    }

    labUtil.getVideoPreviewInfo_v6_3(userId, productId, 0/*标记作品*/, 0/*不强制重新排版*/, function(error, videoInfo){
        if(error) {
            var errMsg = typeof error == 'string' ? error : CODE.OPERATION_FAILED;
            console.log('/v5/lab.js [previewVideoProduct_v6_3] previewVideoProduct_v6_3 err: ' + errMsg);
            return labUtil.ret_func_json(0,errMsg,{},res);
        }

        return labUtil.ret_func_json(1,CODE.OPERATION_SUCCESS, videoInfo,res);

    });

}
router.get('/previewVideoProduct_v6_3', previewVideoProduct_v6_3);
router.post('/previewVideoProduct_v6_3', previewVideoProduct_v6_3);

module.exports = router;